package com.gewu.pm.ui.activity.home;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.gewu.pm.R;
import com.gewu.pm.aop.SingleClick;
import com.gewu.pm.app.AppActivity;
import com.gewu.pm.bean.TestBean;
import com.gewu.pm.ui.activity.filter.FilterMultipleActivity;
import com.gewu.pm.ui.adapter.home.NoOrderCustomerAdapter;
import com.gewu.pm.ui.popup.SelectTimePopup;
import com.hjq.base.BaseAdapter;
import com.hjq.base.BasePopupWindow;

import java.util.ArrayList;
import java.util.List;

/**
 * 未下单客户报表Activity
 */
public final class ReportNoOrderCustomerActivity extends AppActivity implements BaseAdapter.OnItemClickListener {

    private TextView mDateFilterTextView;
    private TextView mOrderStatusFilterTextView;
    private EditText mSearchEditText;
    private RecyclerView mRecyclerView;

    private NoOrderCustomerAdapter mAdapter;
    private List<TestBean> mDataList = new ArrayList<>();
    private List<TestBean> mAllDataList = new ArrayList<>();

    public static void start(Context context) {
        Intent intent = new Intent(context, ReportNoOrderCustomerActivity.class);
        context.startActivity(intent);
    }

    @Override
    protected int getLayoutId() {
        return R.layout.no_order_customer_activity;
    }

    @Override
    protected void initView(Bundle savedInstanceState) {
        mDateFilterTextView = findViewById(R.id.tv_date_filter);
        mOrderStatusFilterTextView = findViewById(R.id.tv_order_status_filter);
        mSearchEditText = findViewById(R.id.et_search);
        mRecyclerView = findViewById(R.id.rv_list);

        // 设置RecyclerView
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        mAdapter = new NoOrderCustomerAdapter(this);
        mAdapter.setOnItemClickListener(this);
        mRecyclerView.setAdapter(mAdapter);

        // 设置搜索监听
        mSearchEditText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            @Override
            public void afterTextChanged(Editable s) {
                searchData(s.toString().trim());
            }
        });

        // 设置点击事件
        setOnClickListener(mDateFilterTextView, mOrderStatusFilterTextView, findViewById(R.id.iv_refresh));
    }

    @Override
    protected void initData() {
        loadData();
    }

    @SingleClick
    @Override
    public void onClick(View view) {
        super.onClick(view);
        int viewId = view.getId();
        if (viewId == R.id.tv_date_filter) {
            // 点击日期筛选
            showDateFilterPopup();
        } else if (viewId == R.id.tv_order_status_filter) {
            // 点击订单状态筛选
            showOrderStatusFilterPopup();
        } else if (viewId == R.id.iv_refresh) {
            // 点击刷新按钮
            toast("刷新功能");
        }
    }

    @Override
    public void onRightClick(View view) {
        super.onRightClick(view);
        // 点击筛选按钮
        FilterMultipleActivity.start(getActivity());
    }

    @Override
    public void onItemClick(RecyclerView recyclerView, View itemView, int position) {
        TestBean bean = mAdapter.getItem(position);
        toast(bean.getName());
    }

    /**
     * 显示日期筛选弹窗
     * 
     * 功能说明：
     * 1. 创建日期选项列表（今日、7天、30天）
     * 2. 显示下拉选择弹窗
     * 3. 选中后更新显示的日期文本
     */
    private void showDateFilterPopup() {
        // 创建日期选项列表
        List<String> options = new ArrayList<>();
        options.add("今日");
        options.add("7天");
        options.add("30天");

        // 获取当前显示的日期文本（用于设置选中状态）
        String currentText = mDateFilterTextView.getText().toString();

        // 创建并显示日期选择弹窗
        new SelectTimePopup.Builder(this)
                .setList(options)
                .setSelectedItem(currentText)
                .setListener(new SelectTimePopup.OnListener() {
                    @Override
                    public void onSelected(BasePopupWindow popupWindow, String category) {
                        // 更新显示的日期文本
                        mDateFilterTextView.setText(category);
                        // 显示提示（实际项目中应根据选择的日期重新加载数据）
                        toast(category);
                    }
                })
                .showAsDropDown(mDateFilterTextView);
    }

    /**
     * 显示订单状态筛选弹窗
     * 
     * 功能说明：
     * 1. 创建订单状态选项列表（未下单、已下单、全部）
     * 2. 显示下拉选择弹窗
     * 3. 选中后更新显示的状态文本
     */
    private void showOrderStatusFilterPopup() {
        // 创建订单状态选项列表
        List<String> options = new ArrayList<>();
        options.add("未下单");
        options.add("已下单");
        options.add("全部");

        // 获取当前显示的状态文本（用于设置选中状态）
        String currentText = mOrderStatusFilterTextView.getText().toString();

        // 创建并显示订单状态选择弹窗
        new SelectTimePopup.Builder(this)
                .setList(options)
                .setSelectedItem(currentText)
                .setListener(new SelectTimePopup.OnListener() {
                    @Override
                    public void onSelected(BasePopupWindow popupWindow, String category) {
                        // 更新显示的状态文本
                        mOrderStatusFilterTextView.setText(category);
                        // 显示提示（实际项目中应根据选择的状态重新加载数据）
                        toast(category);
                    }
                })
                .showAsDropDown(mOrderStatusFilterTextView);
    }

    /**
     * 加载数据
     * 
     * 功能说明：
     * 1. 清空原有数据
     * 2. 创建测试数据（实际项目中应从服务器获取）
     * 3. 更新列表显示
     */
    private void loadData() {
        // 清空数据列表
        mAllDataList.clear();
        mDataList.clear();

        // 创建测试数据（使用 TestBean）
        TestBean bean1 = new TestBean("1", "双东路生鲜店");
        TestBean bean2 = new TestBean("2", "南京路超市");
        TestBean bean3 = new TestBean("3", "人民广场便利店");
        TestBean bean4 = new TestBean("4", "中山路水果店");

        // 添加到全部数据列表（用于搜索时恢复）
        mAllDataList.add(bean1);
        mAllDataList.add(bean2);
        mAllDataList.add(bean3);
        mAllDataList.add(bean4);

        // 复制到当前显示列表
        mDataList.addAll(mAllDataList);
        
        // 更新适配器数据
        mAdapter.setData(mDataList);
    }

    /**
     * 搜索数据
     * 
     * 功能说明：
     * 1. 根据关键词筛选客户名称
     * 2. 更新列表显示
     * 
     * @param keyword 搜索关键词
     */
    private void searchData(String keyword) {
        // 清空当前显示列表
        mDataList.clear();

        if (keyword.isEmpty()) {
            // 关键词为空，显示全部数据
            mDataList.addAll(mAllDataList);
        } else {
            // 根据关键词筛选数据（模糊匹配客户名称）
            for (TestBean bean : mAllDataList) {
                if (bean.getName().contains(keyword)) {
                    mDataList.add(bean);
                }
            }
        }

        // 更新适配器数据
        mAdapter.setData(mDataList);
    }
}
